package arrays;

import java.util.HashSet;
import java.util.Set;

/**
 * @author LiangMu
 * @version \$Id: P18.java, v 0.1, 2023年01月03日 14:04 LiangMu Exp $$
 */
public class P18 {

    public static void main(String[] args) {
        System.out.println(reverseVowels("leetcode")); // leotcede
    }

    /**
     * 给你一个字符串 s ，仅反转字符串中的所有元音字母，并返回结果字符串。
     * <p>
     * 元音字母包括 'a'、'e'、'i'、'o'、'u'，且可能以大小写两种形式出现不止一次。
     */
    public static String reverseVowels(String s) {
        char[] chars = s.toCharArray();
        Set<Character> set = new HashSet<>(10);
        set.add('a');
        set.add('e');
        set.add('i');
        set.add('o');
        set.add('u');
        set.add('A');
        set.add('E');
        set.add('I');
        set.add('O');
        set.add('U');
        int i1 = 0, i2 = chars.length - 1;
        while (i1 < i2) {
            while (i1 < i2 && !set.contains(chars[i1])) {
                ++i1;
            }
            while (i1 < i2 && !set.contains(chars[i2])) {
                --i2;
            }
            if (i1 < i2) {
                char c = chars[i1];
                chars[i1] = chars[i2];
                chars[i2] = c;
                ++i1;
                --i2;
            }
        }
        return new String(chars);
    }
}
